home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
United Public Domain Gold 2
/
United Public Domain Gold 2.iso
/
education
/
pe023.dms
/
pe023.adf
/
ALGORHYTHMS
/
SOURCE
/
FILES.C
< prev
next >
Wrap
C/C++ Source or Header
|
1988-10-05
|
5KB
|
194 lines
/* files.c */
/* Copyright 1990 Thomas E. Janzen All Rights Reserved */
/*
** FACILITY:
**
** AlgoRhythms music improviser on Commodore (TM) Amiga (TM)
** compiled with Lattice (TM) C 5.05
**
** ABSTRACT:
**
** Algorhythms improvises music over the MIDI serial port.
**
** AUTHORS: Thomas E. Janzen
**
** CREATION DATE: 26-MAR-1990
**
** MODIFICATION HISTORY:
** DATE NAME DESCRIPTION
**--
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdlib.h>
#include "AlgoRhythms.h"
extern struct GfxBase *GfxBase;
extern struct IntuitionBase *IntuitionBase;
extern struct DOSBase *DOSBase;
extern struct MathBase *MathBase;
static int Open_Read_File(char *FileName);
static int Open_Save_File(char *FileName);
FILE *FilePointer;
struct Parameter {
double CenterCycle;
double CenterPhase;
double SpreadCycle;
double SpreadPhase;
};
int Save_File(char *FileName, const double *TotalDuration,
const int *ScaleLength, const int Scale[], const int *voices,
const int *tempo,
const struct Parameter *Pitch,
const struct Parameter *Thickness,
const struct Parameter *Dynamics,
const struct Parameter *Duration,
const struct NoteEvent *Events,
double MinNoteLen, double MaxNoteLen){
int Status=0;
register int ScaleIndex;
register int i;
Status=Open_Save_File(FileName);
if(Status == 1) return Status;
fprintf(FilePointer,"%4.2f\n",*TotalDuration);
fprintf(FilePointer,"%4.2f\n",MinNoteLen);
fprintf(FilePointer,"%4.2f\n",MaxNoteLen);
fprintf(FilePointer,"%d\n",*ScaleLength);
for(ScaleIndex = 0; ScaleIndex<(*ScaleLength); ScaleIndex++) {
fprintf(FilePointer,"%d\n",Scale[ScaleIndex]);
}
fprintf(FilePointer,"%d\n",*voices);
fprintf(FilePointer,"%d\n",*tempo);
fprintf(FilePointer,"%4.2f\n",Pitch->CenterCycle);
fprintf(FilePointer,"%4.2f\n",Pitch->CenterPhase);
fprintf(FilePointer,"%4.2f\n",Pitch->SpreadCycle);
fprintf(FilePointer,"%4.2f\n",Pitch->SpreadPhase);
fprintf(FilePointer,"%4.2f\n",Duration->CenterCycle);
fprintf(FilePointer,"%4.2f\n",Duration->CenterPhase);
fprintf(FilePointer,"%4.2f\n",Duration->SpreadCycle);
fprintf(FilePointer,"%4.2f\n",Duration->SpreadPhase);
fprintf(FilePointer,"%4.2f\n",Dynamics->CenterCycle);
fprintf(FilePointer,"%4.2f\n",Dynamics->CenterPhase);
fprintf(FilePointer,"%4.2f\n",Dynamics->SpreadCycle);
fprintf(FilePointer,"%4.2f\n",Dynamics->SpreadPhase);
fprintf(FilePointer,"%4.2f\n",Thickness->SpreadCycle);
fprintf(FilePointer,"%4.2f\n",Thickness->SpreadPhase);
for(i=0;i<MAXVOICE;i++) {
fprintf(FilePointer,"%d %d %d %d\n",
Events[i].LowPitch,Events[i].HighPitch,Events[i].Channel,
Events[i].Walking);
}
fclose(FilePointer);
return(0);
}
int Read_File(char *FileName, double *TotalDuration,
int *ScaleLength, int Scale[], int *voices, int *tempo,
struct Parameter *Pitch, struct Parameter *Thickness,
struct Parameter *Dynamics, struct Parameter *Duration,
const struct NoteEvent *Events, double *MinNoteLen,
double *MaxNoteLen) {
int Status=0;
register int ScaleIndex;
static char tempstring[40];
char *stringptr;
int buflen=40;
register i;
Status=Open_Read_File(FileName);
if (Status != 0) {
return Status;
}
stringptr=fgets(tempstring,buflen,FilePointer);
*TotalDuration=atof(tempstring);
stringptr=fgets(tempstring,buflen,FilePointer);
*MinNoteLen=atof(tempstring);
stringptr=fgets(tempstring,buflen,FilePointer);
*MaxNoteLen=atof(tempstring);
fscanf(FilePointer,"%d",ScaleLength);
for(ScaleIndex = 0; ScaleIndex<(*ScaleLength); ScaleIndex++) {
fscanf(FilePointer,"%d",&Scale[ScaleIndex]);
}
fscanf(FilePointer,"%d",voices);
fscanf(FilePointer,"%d",tempo);
stringptr=fgets(tempstring,buflen,FilePointer); /*junk*/
stringptr=fgets(tempstring,buflen,FilePointer);
Pitch->CenterCycle=atof(tempstring);
stringptr=fgets(tempstring,buflen,FilePointer);
Pitch->CenterPhase=atof(tempstring);
stringptr=fgets(tempstring,buflen,FilePointer);
Pitch->SpreadCycle=atof(tempstring);
stringptr=fgets(tempstring,buflen,FilePointer);
Pitch->SpreadPhase=atof(tempstring);
stringptr=fgets(tempstring,buflen,FilePointer);
Duration->CenterCycle=atof(tempstring);
stringptr=fgets(tempstring,buflen,FilePointer);
Duration->CenterPhase=atof(tempstring);
stringptr=fgets(tempstring,buflen,FilePointer);
Duration->SpreadCycle=atof(tempstring);
stringptr=fgets(tempstring,buflen,FilePointer);
Duration->SpreadPhase=atof(tempstring);
stringptr=fgets(tempstring,buflen,FilePointer);
Dynamics->CenterCycle=atof(tempstring);
stringptr=fgets(tempstring,buflen,FilePointer);
Dynamics->CenterPhase=atof(tempstring);
stringptr=fgets(tempstring,buflen,FilePointer);
Dynamics->SpreadCycle=atof(tempstring);
stringptr=fgets(tempstring,buflen,FilePointer);
Dynamics->SpreadPhase=atof(tempstring);
stringptr=fgets(tempstring,buflen,FilePointer);
Thickness->SpreadCycle=atof(tempstring);
stringptr=fgets(tempstring,buflen,FilePointer);
Thickness->SpreadPhase=atof(tempstring);
for(i=0;i<MAXVOICE;i++) {
stringptr=fgets(tempstring,buflen,FilePointer);
sscanf(stringptr,"%d %d %d %d",
&(Events[i].LowPitch),&(Events[i].HighPitch),
&(Events[i].Channel),&(Events[i].Walking));
}
fclose(FilePointer);
return 0;
}
static int Open_Read_File(char *FileName) {
char *mode="r";
if ((FilePointer = fopen(FileName, mode)) == NULL) {
return(1);
}
return 0;
}
static int Open_Save_File(char *FileName) {
char *mode="w";
if ((FilePointer = fopen(FileName, mode)) == NULL) {
return(1);
}
return 0;
}